package _28_数组中出现次数超过一半的数字;

import java.util.HashMap;

/*
题目描述
数组中有一个数字出现的次数超过数组长度的一半，请找出这个数字。
例如输入一个长度为9的数组{1,2,3,2,2,2,5,4,2}。
由于数字2在数组中出现了5次，超过数组长度的一半，因此输出2。如果不存在则输出0。
 */
public class Solution {
    public int MoreThanHalfNum_Solution(int[] array) {
        if (array.length == 0) {
            return 0;
        }

        HashMap<Integer, Integer> map = new HashMap<>();
        int n = array.length / 2;
        for (int i = 0; i < array.length; i++) {
            Integer num = map.get(array[i]);
            if (num == null) {
                map.put(array[i], 1);
            } else {
                map.put(array[i], num + 1);

                if (num + 1 > n) {
                    System.out.println(num + 1);
                    System.out.println(array[i]);
                    return array[i];
                }
            }

        }
        return 0;

    }
//思路，如果count=0，赋新值，count=1，如果下一个数等于就+1，不等于就-1，
    public int MoreThanHalfNum_Solution2(int[] array) {
        if (array.length == 0) {
            return 0;
        }
        int res = array[0];
        int count=1;
        for(int i=1;i<array.length;i++){
            if(count==0){
                res = array[i];
                count=1;
            }else if(res ==array[i]){
                count++;
            }else{
                count--;
            }
        }
        count=0;
        for(int i=0;i<array.length;i++){
            if(array[i]==res){
                count++;
            }
        }
        return count>array.length/2? res:0;
    }

    public static void main(String[] args) {
        int nums[] = {1, 2, 3, 2, 2, 2, 5, 4, 2};
        Solution solution = new Solution();
        System.out.println(solution.MoreThanHalfNum_Solution2(nums));
    }
}